koa源码lib主要文件有
application.js
context.js
request.js
response.js
application.js
koa主要的逻辑处理代码整个koa的处理
context.js
将req,res方法 挂载在这,生成ctx上下文对象
requests.js
封装处理req对象
response.js
封装处理res对象
对于每个文件引入的库
application.js
const isGeneratorFunction = require('is-generator-function');
//判断是不是generator function
const debug = require('debug')('koa:application');
//设置debug 的`namespace`
const onFinished = require('on-finished');
//执行回调当http request关闭结束或者有错误的时候
const response = require('./response');
//引入response
const compose = require('koa-compose');
//重头戏 koa-compose
const isJSON = require('koa-is-json');
//判断body是否应该为JSON //string 假值或者为stream或者buffer的时候返回false
const context = require('./context');
const request = require('./request');
const statuses = require('statuses');
//下面只用了empty方法
//statuses是一个对象 empty属性
//status.empty = {
// 204: true,
// 205: true,
// 304: true
//}
const Cookies = require('cookies');
//获取设置http(s)cookie的模块
const accepts = require('accepts');
//http accepts
//Accept 请求头用来告知客户端可以处理的内容类型,这种内容类型用MIME类型来表示
const Emitter = require('events');
//事件机制
const assert = require('assert');
//断言库
const Stream = require('stream');
// stream模块
const http = require('http');
//引入http模块
const only = require('only');
//返回对象的指定键值
const convert = require('koa-convert');
//将基于koa生成器的中间件转换为基于promise的中间件
const deprecate = require('depd')('koa');
//给出一些信息(标志已经弃用)
context.js
const createError = require('http-errors');
//用于throw方法 制造一个http错误(createError(401, 'Please login to view this page.'))
//类似于这种用法
const httpAssert = require('http-assert');
//用于断言处理,可以返回ctx.throw之类的给捕捉
const delegate = require('delegates');
//用来委托方法 getter 与setter
const statuses = require('statuses');
request.js
const net = require('net');
const contentType = require('content-type');
//用于解析Content-Type
const stringify = require('url').format;
const parse = require('parseurl');
//解析url(带记忆)内部有一个fastparse 方法
const qs = require('querystring');
//用于处理query字符串
const typeis = require('type-is');
const fresh = require('fresh');
//检测304之类的
const only = require('only');
//获得对象指定的键值
response.js
const contentDisposition = require('content-disposition');
//创建和解析Content-Disposition头部信息
const ensureErrorHandler = require('error-inject');
//在stream中注入错误信息
const getType = require('mime-types').contentType;
const onFinish = require('on-finished');
//在http请求结束前完成或者有错误的时候执行回调
const isJSON = require('koa-is-json');
/**
function isJSON(body) {
if (!body) return false;
if ('string' == typeof body) return false;
if ('function' == typeof body.pipe) return false;
if (Buffer.isBuffer(body)) return false;
return true;
}
*/
const escape = require('escape-html');
//用于HTML字符串转义
const typeis = require('type-is').is;
//typeis.is(mediaType, types)
/**
var mediaType = 'application/json'
typeis.is(mediaType, ['json']) // 'json'
typeis.is(mediaType, ['html', 'json']) // 'json'
typeis.is(mediaType, ['application/*']) // 'application/json'
typeis.is(mediaType, ['application/json']) // 'application/json'
typeis.is(mediaType, ['html']) // false
*/
const statuses = require('statuses');
//被nodejs所支持的状态码
const destroy = require('destroy');
const assert = require('assert');
const extname = require('path').extname;
//返回扩展名
const vary = require('vary');
//header 的 vary字段 后面 追加 val值。
const only = require('only');
//从一个对象里面提取需要的属性
这篇文章一直想写了
还想起那一夜我看到白天的代码,实在太美了。也希望自己能做下笔记
其实我使用nodejs的经验都很少,包都是引入通过npmjs查找,然后大多数包都是大概看了下使用方法与用于,难免有所偏差
(当然后面会对一些包做分析)
如果有高手,希望不吝赐教!
感谢你的阅读
参考资料
koa
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。